﻿//
//
// 版权所有 (c) 2021-2023 JR  
//
// 特此免费授予获得本软件的任何人以处理本软件的权利，但须遵守以下条件：在所有副本或重要部分的软件中必须包括上述版权声明和本许可声明。
//
// 软件按“原样”提供，不提供任何形式的明示或暗示的保证，包括但不限于对适销性、适用性和非侵权的保证。
// 在任何情况下，作者或版权持有人均不对任何索赔、损害或其他责任负责，无论是因合同、侵权或其他方式引起的，与软件或其使用或其他交易有关。

using SapNwRfc;
using SapNwRfc.Pooling;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EMC.VISITOR.Core;
public static class Sap
{
    /// <summary>
    /// 系统不能加载ICU通用库的情况下
    /// </summary>
    public static void SapLoadICUSetUp(this IServiceCollection service)
    {

        NativeLibrary.SetDllImportResolver(
             assembly: typeof(SapLibrary).Assembly,
             resolver: (string libraryName, Assembly assembly, DllImportSearchPath? searchPath) =>
             {
                 if (libraryName == "sapnwrfc")
                 {
                     //var rootDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                     //string path = Path.Combine(rootDir, "nwrfcsdk", libraryName);

                     //NativeLibrary.TryLoad(
                     //    libraryPath: Path.Combine("<your_sap_rfc_binaries_path>", libraryName),
                     //    handle: out IntPtr handle);

                     //var rootDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                     //string path = Path.Combine(rootDir, "nwrfcsdk", libraryName);
                     ////手动加载ICU库
                     //NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icuuc50"));
                     //NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icudt50"));
                     //NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icuin50"));

                     //NativeLibrary.TryLoad(
                     //    libraryPath: path,
                     //    handle: out IntPtr handle);

                     var rootDir = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                     string path = Path.Combine(rootDir, "nwrfcsdk", libraryName);

                     //手动加载ICU库
                     NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icuuc50"));
                     NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icudt50"));
                     NativeLibrary.Load(Path.Combine(rootDir, "nwrfcsdk", "icuin50"));

                     NativeLibrary.TryLoad(
                         libraryPath: path,
                         handle: out IntPtr handle);

                     return handle;
                 }

                 return IntPtr.Zero;
             });
    }

    public static void SapConnectionSetUp(this IServiceCollection service)
    {
        var config = App.GetOptions<OtherSystemOptions>();
        int i = 0;
        //var config = otherSystemConfigs.First(r => r.InterfaceSystemName == nameof(OtherSystemTypeEnum.SAP));
        if (config != null && !config.ConnectionString.IsNullOrEmpty())
        {
            service.AddSingleton<ISapConnectionPool>(new SapConnectionPool(config.ConnectionString));
            service.AddScoped<ISapPooledConnection, SapPooledConnection>();
        }
    }
}
